package com.ckf.serene.enums;

import java.io.Serializable;

/**
 * @author serence
 * @date 2021/7/31 10:24
 */
public enum WXPayBank implements Serializable {

    B1("工商银行", "1002"), B2("农业银行", "1005"),
    B5("交通银行", "1020"), B6("招商银行", "1001"),
    B17("宁波银行", "1056"), B3("建设银行", "1003"),
    B8("民生银行", "1006"), B12("兴业银行", "1009"),
    B9("平安银行", "1010"), B11("中信银行", "1021"),
    B13("光大银行", "1022"), B14("广发银行", "1027"),
    B16("北京银行", "1032"), B16I("北京银行", "4836"),
    B10("浦发银行", "1004"), B10I("浦东发展银行", "1004"),
    B7("邮储银行", "1066"), B7I("邮政银行", "1066"), B7II("邮政储蓄银行", "1066"),
    B15("华夏银行", "1025"), B19("上海银行", "1024"), B20("南京银行", "1054"),
    B21("长子县融汇村镇银行", "4755"), B22("长沙银行", "4216"),
    B23("浙江泰隆商业银行", "4051"), B24("中原银行", "4753"),
    B25("企业银行（中国）", "4761"), B26("顺德农商银行", "4036"),
    B27("衡水银行", "4752"), B28("长治银行", "4756"),
    B29("大同银行", "4767"), B30("河南省农村信用社", "4115"),
    B31("宁夏黄河农村商业银行", "4150"), B32("山西省农村信用社", "4156"),
    B33("安徽省农村信用社", "4166"), B34("甘肃省农村信用社", "4157"),
    B35("天津农村商业银行", "4153"), B36("广西壮族自治区农村信用社", "4113"),
    B37("陕西省农村信用社", "4108"), B38("深圳农村商业银行", "4076"),
    B39("宁波鄞州农村商业银行", "4052"), B40("浙江省农村信用社联合社", "4764"),
    B41("江苏省农村信用社联合社", "4217"), B42("江苏紫金农村商业银行股份有限公司", "4072"),
    B43("北京中关村银行股份有限公司", "4769"), B44("星展银行（中国）有限公司", "4778"),
    B45("枣庄银行股份有限公司", "4766"), B46("海口联合农村商业银行股份有限公司", "4758"),
    B47("南洋商业银行（中国）有限公司", "4763"), B4("中国银行", "1026");
    /**
     * 银行名称
     */
    private String bankName;

    /**
     * 获取银行名称
     *
     * @return
     */
    private String getBankName() {
        return bankName;
    }

    /**
     * 银行编号
     */
    private String bankCode;

    /**
     * 检查提交的银行信息中是否存在下列的键，如果存在，匹配指定银行，获取银行编码
     */
    private static String[] KEYS = {"村镇银行", "农商银行", "农村信用社联合社", "农村信用", "农村商业银行股份有限公司", "农村商业银行", "银行（中国）有限公司"};

    /**
     * 构造函数
     *
     * @param bankName 银行名称
     * @param bankCode 银行编号
     */
    private WXPayBank(String bankName, String bankCode) {
        this.bankName = bankName;
        this.bankCode = bankCode;
    }

    /**
     * 获取银行编号
     *
     * @param bankName 银行名称
     * @return
     */
    public static String getBankCode(String bankName) {
        if (bankName == null || "".equals(bankName)) return null;
        if ("中国银行".equals(bankName)) return WXPayBank.B4.bankCode;
        bankName = bankName.replace("中国", "");
        for (WXPayBank bank : WXPayBank.values()) {
            if (bank.getBankName().equals(bankName)) {
                return bank.bankCode;
            } else {
                for (String key : KEYS) {
                    if (bankName.contains(key)) {
                        bankName = bankName.replace(key, "");
                        if (bank.getBankName().contains(bankName)) {
                            return bank.bankCode;
                        }
                    }
                }
                bankName = bankName.substring(0, 2);
                if (bank.getBankName().contains(bankName)) {
                    return bank.bankCode;
                }
            }
        }
        return null;
    }

}
